package com.smartleanx.module.hrm.service.companysystemtype;

import java.util.*;
import javax.validation.*;
import com.smartleanx.module.hrm.controller.admin.companysystemtype.vo.*;
import com.smartleanx.module.hrm.dal.dataobject.companysystemtype.CompanySystemTypeDO;
import com.smartleanx.framework.common.pojo.PageResult;
import com.smartleanx.framework.common.pojo.PageParam;

/**
 * 公司制度库分类 Service 接口
 *
 * @author 精益大师
 */
public interface CompanySystemTypeService {

    /**
     * 创建公司制度库分类
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createCompanySystemType(@Valid CompanySystemTypeSaveReqVO createReqVO);

    /**
     * 更新公司制度库分类
     *
     * @param updateReqVO 更新信息
     */
    void updateCompanySystemType(@Valid CompanySystemTypeSaveReqVO updateReqVO);

    /**
     * 删除公司制度库分类
     *
     * @param id 编号
     */
    void deleteCompanySystemType(Long id);

    /**
     * 获得公司制度库分类
     *
     * @param id 编号
     * @return 公司制度库分类
     */
    CompanySystemTypeDO getCompanySystemType(Long id);

    /**
     * 获得公司制度库分类分页
     *
     * @param pageReqVO 分页查询
     * @return 公司制度库分类分页
     */
    PageResult<CompanySystemTypeDO> getCompanySystemTypePage(CompanySystemTypePageReqVO pageReqVO);

    /**
     * 获取所有公司制度类型
     * @return
     */
    List<CompanySystemTypeDO> getCompanySystemTypeList(String name);

    /**
     * 根据id批量查询制度分类列表
     * @param ids
     * @return
     */
    List<CompanySystemTypeDO> getTypeList(Collection<Long> ids);

    /**
     * 构建首页制度库分类列表(管理端)
     * @return
     */
    List<CompanySystemTypeRespVO> getSystemTypeTreeList(Long typeId);

    /**
     * 构建首页制度分类列表（员工端）
     * @return
     */
    List<CompanySystemTypeRespVO>getSystemTypeTreeByUser(Integer learnStatus,Long typeId,String name);

    /**
     * 获取首页公司制度分类
     * @return
     */
    List<CompanySystemTypeDO> getCompanySystemParentList();

    /**
     * 添加内置制度分类
     */
    void curdInitializeCompanyType();

}
